//
//  HICNetworktools.swift
//  vibo
//
//  Created by jht-seven on 16/6/27.
//  Copyright © 2016年 jht-seven. All rights reserved.
//

import UIKit
import AFNetworking
// 请求方式枚举
enum MethodType: String {
    case GET = "GET"
    case POST = "POST"
}
class HICNetworktools: AFHTTPSessionManager {
    // 全局访问点
    static let sharedTools:HICNetworktools = {
        let tools = HICNetworktools()
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    }()
    
    // 给我们成功的闭包和失败的闭包格式起别名
    typealias SuccessClosure = (response: AnyObject?)->()
    typealias FailureClosure = (error: NSError)->()
    //
    /**
     请求数据方法
     
     - parameter method:     方式
     - parameter urlString:  url
     - parameter parameters: 参数
     - parameter success:    成功
     - parameter failure:    失败
     */
    func request(method:MethodType, urlString: String, parameters: AnyObject?, success: SuccessClosure, failure: FailureClosure){
        // GET 请求
        if method == .GET {
            self.GET(urlString, parameters: parameters, progress: nil, success: { (_, res) -> Void in
                success(response: res)
                }, failure: { (_, err) -> Void in
                    failure(error: err)
                    
            })
        }else {
            // POST 请求
            self.POST(urlString, parameters: parameters, progress: nil, success: { (_, res) -> Void in
                success(response: res)
                }, failure: { (_, err) -> Void in
                    failure(error: err)
                    
            })
        }
    }
}

extension HICNetworktools {
    // 请求token
    func oauthLoadUserAccount(code: String, success: SuccessClosure, failure: FailureClosure){
        // 请求url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        // 请求参数
        let params = [
            "client_id":APPKEY,
            "client_secret":APPSECRET,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":REDIRECT_URI
        ]
        
        self.request(MethodType.POST, urlString: urlString, parameters: params, success: success, failure: failure)
    }
    // 请求个人信息数据
    func oauthLoadUserInfo(userAccont: HICUserAccount, success: SuccessClosure, failure: FailureClosure) {
        // 请求url
        let urlString = "https://api.weibo.com/2/users/show.json"
        // 请求参数
        let params = [
            "access_token":userAccont.access_token!,
            "uid":userAccont.uid!
        ]
        
        self.request(MethodType.GET, urlString: urlString, parameters: params, success: success, failure: failure)
    }
        
}

// 请求首页数据
extension HICNetworktools{
    func homeLoadStatusData(sinceId:Int64, maxId: Int64, success: SuccessClosure, failure: FailureClosure){
        // 请求url
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        // 请求参数
        // accessToken!  因为如果没有登录的话 根本就不会进行到请求数据 所以可以强行解包
        let params = [
            "access_token": HICUserAccountTools.sharedTools.accessToken!,
            "since_id":"\(sinceId)",
            "max_id":"\(maxId)"
        ]
        // 发送请求
        request(.GET, urlString: urlString, parameters: params, success: success, failure: failure)
    }
}


// 发布微博界面
extension HICNetworktools{
    func composeUpdate(status: String, success: SuccessClosure, failure: FailureClosure){
        // 请求url
        let urlString = "https://api.weibo.com/2/statuses/update.json"
        // 请求参数
        let params = [
            "access_token": HICUserAccountTools.sharedTools.accessToken!,
            "status": status
        ]
        
        request(.POST, urlString: urlString, parameters: params, success: success, failure: failure)
        
    }
    
    
    // 发送带有图片的微博
    func comoposeUpload(status: String,imageList:[UIImage], success: (response: AnyObject?)->(), failure:(error: NSError)->() ){
        // 请求url
        let URLString = "https://upload.api.weibo.com/2/statuses/upload.json"
        // 请求参数
        let params = [
            "access_token":HICUserAccountTools.sharedTools.accessToken!,
            "status":status
            
        ]
        POST(URLString, parameters: params, constructingBodyWithBlock: { (formdata) -> Void in
            // 以表单形式提交（拼接到表单后面提交）
            /*
             data : 将要上传到服务器的二进制文件
             name : 服务器要求规定好文件名称(协议)
             fileName:  上传文件完成后保存到服务器的文件路径 （新浪微博不需要你指定 都会按着自己的方式保存到响应的文件夹中）--- 随意传
             mimeType: 指定上传的二进制文件的格式 application/octet-stream 忽略上传文件的格式
             如果指定为图片 image/jpeg （大类型/ 小类型）
             */
            
            // 遍历数组
            for image in imageList {
                // image 转二进制
                let data = UIImagePNGRepresentation(image)!
                
                formdata.appendPartWithFileData(data, name: "pic", fileName: "oooo", mimeType: "application/octet-stream")
            }
            
            }, progress: nil, success: { (_, response) -> Void in
                
                success(response: response)
                
        }) { (_, error) -> Void in
            failure(error: error)
        }
        
    }
}
